/***********************************************************************************************//**
*\n  @file       app_can.c
*\n  @brief      app_can模块,主文件
*\n  @details
*\n -----------------------------------------------------------------------------------
*\n  文件说明：
*\n       1. app_can模块, 启动接口
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:    修改人:       修改日期:          描述:
*\n  V0.01  罗先能        2021.5.10      创建
*\n
***************************************************************************************************/

/**************************************************************************************************
* 头文件
***************************************************************************************************/
#include "hal.h"
#include "app_can.h"
#include "can_recv.h"
#include "can_send.h"

#undef   DEBUG_LEVEL
#define  DEBUG_LEVEL  5
#include "vdebug.h"

/**************************************************************************************************
* 宏定义、结构定义
***************************************************************************************************/


/**************************************************************************************************
* 全局变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有变量声明、定义
***************************************************************************************************/
TMsg  tMsg1 =
{
	.can_no     = 0,		// 0 =can0, 1= can1
	.can_kbps   = 500,      // kbps
	.can_type   = 0,        //
	.can_msg_id = 0,
	.can_msg    = { 0 },
};


/**************************************************************************************************
* 私有函数声明、定义
***************************************************************************************************/
static void usage(char *name )
{
	printf("--------- Can0/Can1 Test ---------------------\n");
	printf("Usage:\n");
	printf("send frame: %s wr <can_no> <filename>\n", name);
	printf("read frame: %s rd <can_no> <Kbps>    \n", name);
	printf("       <can_no>  : 0 = can0 ,1= can1\n");
	printf("       <Kbps>    : 50 ~ 1000 (kbps) \n");
	printf("       <filename>: send can massage from file \n");
	printf("\n");
}

/**************************************************************************************************
* 全局函数声明、定义
***************************************************************************************************/

// 初始化app can模块
int AppCanInit(int argc, char *argv[])
{
	return 0;
}


// 启动app can模块
int AppCanStart(int argc, char *argv[])
{

	if (argc != 4)
	{
		usage(argv[0]);
		return -1;
	}
	else if (strcmp(argv[1],  "rd") == 0)  // 读取CAN报文 ---------------------
	{

		if (strcmp(argv[2],  "0") == 0)
			tMsg1.can_no = 0;
		else if(strcmp(argv[2], "1") == 0)
			tMsg1.can_no= 1;
		else
		{
			usage(argv[0]);
			return -1;
		}

		tMsg1.can_kbps = atoi(argv[3]);
		if (tMsg1.can_kbps < 50)
		{
			printf("error: bitrate = %s kbps \n\n", argv[2]);
			usage(argv[0]);
			return -1;
		}

		can_start_input(NULL);
		printf("Ctrl + C: exit \n");
		while (1)
		{
			usleep( 20 * 1000);
		}
	}
	else if (strcmp(argv[1],  "wr") == 0)
	{
		// 发送can报文 --------------------
		if (strcmp(argv[2],  "0") == 0)
			tMsg1.can_no = 0;
		else if(strcmp(argv[2], "1") == 0)
			tMsg1.can_no= 1;
		else
		{
			usage(argv[0]);
			return -1;
		}
		char *filename = argv[3];
		can_send(tMsg1.can_no, filename);
	}

  	return(0);
}

